package com.zp.self.module.level_4_算法练习.算法.双指针.左右指针;
import org.junit.Test;

/**
 * @author By ZengPeng
 */
public class 力扣_942_增减字符串匹配 {
    @Test
    public void main() {
        
        Solution solution = new 力扣_942_增减字符串匹配().new Solution();
        System.out.println(solution);
    }

    /**
     题目：由范围 [0,n] 内所有整数组成的 n + 1 个整数的排列序列可以表示为长度为 n 的字符串 s ，其中:
         如果 perm[i] < perm[i + 1] ，那么 s[i] == 'I'
         如果 perm[i] > perm[i + 1] ，那么 s[i] == 'D'
         给定一个字符串 s ，重构排列 perm 并返回它。如果有多个有效排列perm，则返回其中 任何一个 。

         示例 1：
         输入：s = "IDID"
         输出：[0,4,1,3,2]

         示例 2：
         输入：s = "III"
         输出：[0,1,2,3]

         示例 3：
         输入：s = "DDI"
         输出：[3,2,0,1]

     分析：【G 💖💖💖】
        1.左右指针：记录当前最大值、最小值
                --执行耗时:1 ms,击败了100.00% 的Java用户
                --编码耗时:[>60min]

     边界值 & 注意点：
        1.
     **/
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int[] diStringMatch(String s) {
        int left =0,right =s.length();
        int[] res = new int[s.length()+1];
        char[] chars = s.toCharArray();
        //初始化最后一个值
        for (int i = s.length(); i >0; i--) {
            if(chars[i-1]=='D')
                res[i] = left++;
            else
                res[i] = right--;
        }
        res[0] = left;
        return res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}